// process.cwd  当前执行的工作目录   path.resolve()
const path = require("path");
// 使用path.resolve 具备解析的功能，如果遇到/会回 到根目录
console.log(path.resolve(__dirname, "/aaa"));
console.log(path.join("a", "../b", "/c")); // 如果仅仅是拼接可以采用join 可以无视/的情况

// process.env 环境变量 cross-env (临时在终端环境下设置环境变量)  永久设置（windows是在高级系统设置里）  (mac下 可以将环境变量设置到.bash_profile)

// process.argv 运行时提供的参数 用户传递的参数  commander、yargs、minimist...  --help
// process.platform 平台  darwin / win32  (用户不同的配置目录)
// process.nextTick (微任务 node中提供的微任务 异步操作)

// 浏览器中有事件环， node中也具备 一个事件环 (和浏览器是一样的效果)

// 事件环的流程
// 1.我们写的js代码会交给v8引擎处理
// 2.代码中会调用nodeapi，node会调用自己的 libuv库来处理
// 3.libiuv 通过阻塞的i/o 和 多线程来进行 实现的  （异步i/o）
// 4.通过事件驱动的方式将结果放到对应的队列中

// Promise.resolve().then(() => {
//   console.log("then");
// });
// ~(function fn() {
//   process.nextTick(() => {
//     console.log("nextTick");
//     fn();
//   });
// })();


// setTimeout(()=>{
//     console.log('timer')
// })
// setImmediate(()=>{
//     console.log('setImmediate')
// })


const fs = require('node:fs');

// poll  fs.readFile()  -> check (setImmediate)  -> timer(setTimeout)
fs.readFile(path.resolve(__dirname,'note.md'), () => {
  setTimeout(() => {
    console.log('timeout');
  }, 0);
  setImmediate(() => {
    console.log('immediate');
  });
});


// process.stdout process.stdin process.str  process.kill (进程)